Skip to content

Update some crates, allow zizmor usage, fix beads installation#92

Merged
ocean merged 13 commits intomainfrom
dev
Apr 22, 2026
Merged

Update some crates, allow zizmor usage, fix beads installation#92
ocean merged 13 commits intomainfrom
dev

Conversation

@ocean
Copy link
Copy Markdown
Owner

@ocean ocean commented Apr 9, 2026

Summary by CodeRabbit

  • Chores

    • Updated ignore patterns to avoid committing local credentials and embedded runtime artifacts.
    • Removed deprecated backup, configuration, dependency and label backup data.
    • Parameterised CI matrix and updated Elixir/Erlang tool version constraints to newer releases.
    • Extended local development permissions to enable additional tooling.
  • Documentation

    • Added a RELEASE_PROCESS document detailing the end-to-end release workflow, checksum regeneration and publish steps.

ocean added 3 commits April 9, 2026 09:05
- Remove backup/ files from git tracking (.beads/.gitignore already excludes them)
- Add .beads-credential-key to gitignore (machine-specific secret)
- Add embeddeddolt/ to gitignore (auto-created runtime directory)
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 9, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Removed several .beads/backup files, added ignore entries to .beads/.gitignore, appended a permission in .claude/settings.local.json, parameterised CI Elixir/OTP matrix and bumped tool versions, and added RELEASE_PROCESS.md documenting release, CI artifact upload, checksum regeneration, and publish steps.

Changes

Cohort / File(s) Summary
Gitignore Configuration
\.beads/.gitignore
Added ignore entries for a machine-specific credential key (.beads-credential-key) and an embedded Dolt runtime directory (embeddeddolt/).
Backup Metadata Cleanup
\.beads/backup/backup_state.json, \.beads/backup/config.jsonl, \.beads/backup/dependencies.jsonl, \.beads/backup/labels.jsonl
Deleted backup and config JSONL files, removing persisted backup state, compaction/config settings, dependency relationships, and label mappings.
Local Claude Permissions
\.claude/settings.local.json
Appended Bash(zizmor) to permissions.allow.
Release Documentation
RELEASE_PROCESS.md
Added release workflow: bump mix.exs version, update changelog, run tests/formatters, create GitHub release tag (no v), wait for six CI matrix jobs to upload NIF artifacts, regenerate rustler_precompiled checksum file for all artifacts, commit checksum file, then publish release and Hex package; includes operational notes.
CI Matrix & Tooling
\.github/workflows/ci.yml, mise.toml
Parameterised CI Elixir/Erlang matrix values and updated Mix/mise cache keys to use matrix variables; bumped mise.toml tool versions (erlang 27.0→28.0, elixir 1.18.0-otp-27→1.19.5-otp-28).

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor Dev as Developer
    participant GH as GitHub (releases & CI)
    participant CI as CI matrix (6 jobs)
    participant Art as Artifact Store
    participant Rustler as rustler_precompiled
    participant Hex as Hex\.pm

    Dev->>GH: push tag matching mix\.exs (no "v")
    GH->>CI: trigger release CI jobs (6 matrix entries)
    CI->>Art: upload built NIF artifacts
    Dev->>Rustler: run mix rustler_precompiled.download --all --ignore-unavailable
    Rustler->>Art: fetch available artifacts, compute sha256 checksums
    Rustler->>Dev: produce checksum-Elixir.EctoLibSql.Native.exs
    Dev->>GH: commit & push checksum file
    Dev->>GH: publish (remove draft) release
    Dev->>Hex: mix hex.publish
    Note right of GH: CI must finish and artifacts be available before checksum regen and publish
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • chore: Create zizmor.yml #87: Overlaps edits to .beads files and CI/tooling changes; may conflict with backup file deletions and .beads/.gitignore updates.

Poem

🐰 I nibbled backups from the ground,

Hid a key where secrets won't be found,
Taught Claude one tiny Bashy song,
Counted builds — six jobs strong,
Hop, checksum, push — release is bound!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title partially relates to the changeset. It mentions 'allow zizmor usage' and 'fix beads installation', which correspond to changes in .claude/settings.local.json and .beads/ files, but omits the significant version upgrades to Erlang, Elixir, and Rust tooling (mise.toml and .github/workflows/ci.yml), plus the new RELEASE_PROCESS.md documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.claude/settings.local.json:
- Line 68: The policy entry "Bash(gh api:*)" is too broad; replace this wildcard
with explicit allowed gh api patterns that enumerate only the needed endpoints
and verbs (e.g., specific repo, issues, or PR endpoints) so least-privilege is
enforced; update the settings.local.json entry (replace "Bash(gh api:*)") with a
list of narrower patterns that exactly match the gh api endpoints your tooling
uses (include HTTP verbs where supported) and remove the global wildcard.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: dee84c8e-a74b-48ea-a156-feffc08969f3

📥 Commits

Reviewing files that changed from the base of the PR and between 9166b6e and e61ad2a.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (9)
  • .beads/.gitignore
  • .beads/backup/backup_state.json
  • .beads/backup/comments.jsonl
  • .beads/backup/config.jsonl
  • .beads/backup/dependencies.jsonl
  • .beads/backup/events.jsonl
  • .beads/backup/issues.jsonl
  • .beads/backup/labels.jsonl
  • .claude/settings.local.json
💤 Files with no reviewable changes (4)
  • .beads/backup/backup_state.json
  • .beads/backup/dependencies.jsonl
  • .beads/backup/config.jsonl
  • .beads/backup/labels.jsonl

Comment thread .claude/settings.local.json Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@RELEASE_PROCESS.md`:
- Line 25: Update RELEASE_PROCESS.md to use en-AU/British spelling: replace US
spellings such as "artifact" and "artifacts" with "artefact" and "artefacts"
across the file (including the sentence "This creates the tag and a draft
release. The CI workflow fires and builds all 6 NIF targets, uploading each
artifact to the release."), and similarly update any other occurrences flagged
(lines referenced) so all instances in the file follow the repository rule for
British/Australian English.
- Line 77: Update the wording that currently describes `--ignore-unavailable` as
“Safe to use during checksum generation” to restrict its scope: state that
`--ignore-unavailable` should only be used in test or recovery scenarios and not
for normal release checksum generation, and add an explicit requirement to
verify that all 6 artefacts exist (or confirm why any are intentionally missing)
before using it for checksum regeneration; reference the `--ignore-unavailable`
flag and the “checksum generation” step and mention “all 6 artefacts” so readers
know the precondition.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4ba85ab8-34dc-445c-8e15-0b19adcb97a1

📥 Commits

Reviewing files that changed from the base of the PR and between e61ad2a and dc104c4.

📒 Files selected for processing (1)
  • RELEASE_PROCESS.md

Comment thread RELEASE_PROCESS.md Outdated
Comment thread RELEASE_PROCESS.md Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
RELEASE_PROCESS.md (2)

19-19: Consider adding backticks around mix.exs for consistency.

Other file names in the document use backticks (e.g., line 47's checksum-Elixir.EctoLibSql.Native.exs, line 76's native.ex). Wrapping mix.exs in backticks here would maintain consistent formatting.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@RELEASE_PROCESS.md` at line 19, Wrap mix.exs in backticks for consistency
with other filenames; update the sentence that currently reads "The tag must
match the version in mix.exs exactly" to use `mix.exs` (keep references to
`native.ex` and the tag pattern `*.*.*` unchanged).

78-78: Optional: Add usage example for the test_only workflow option.

Since the test_only workflow_dispatch input is mentioned as useful for testing, consider adding a brief example of how to invoke it (e.g., via gh workflow run or the GitHub Actions UI) to help developers use this feature.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@RELEASE_PROCESS.md` at line 78, Add a short usage example showing how to
invoke the release workflow with the workflow_dispatch input test_only to skip
gh release upload: mention the CLI form (gh workflow run <workflow-name> --ref
<branch> with the input test_only=true via --field or equivalent) and the
Actions UI form (select the workflow in GitHub Actions, click "Run workflow" and
set test_only to true), so developers can quickly run the build matrix without
creating a real release; reference the workflow_dispatch trigger, the test_only
input, and that it skips the gh release upload step.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@RELEASE_PROCESS.md`:
- Line 19: Wrap mix.exs in backticks for consistency with other filenames;
update the sentence that currently reads "The tag must match the version in
mix.exs exactly" to use `mix.exs` (keep references to `native.ex` and the tag
pattern `*.*.*` unchanged).
- Line 78: Add a short usage example showing how to invoke the release workflow
with the workflow_dispatch input test_only to skip gh release upload: mention
the CLI form (gh workflow run <workflow-name> --ref <branch> with the input
test_only=true via --field or equivalent) and the Actions UI form (select the
workflow in GitHub Actions, click "Run workflow" and set test_only to true), so
developers can quickly run the build matrix without creating a real release;
reference the workflow_dispatch trigger, the test_only input, and that it skips
the gh release upload step.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4438bd0a-31c2-4ebd-9bac-6af749d3f114

📥 Commits

Reviewing files that changed from the base of the PR and between dc104c4 and 18e8b30.

📒 Files selected for processing (2)
  • .claude/settings.local.json
  • RELEASE_PROCESS.md
✅ Files skipped from review due to trivial changes (1)
  • .claude/settings.local.json

ocean added 3 commits April 9, 2026 15:14
Latest: Elixir 1.19.0 / OTP 28.0
Compat: Elixir 1.18.0 / OTP 27.0 (was 1.17.0 / 26.2)
Version strings now defined once in each job's matrix and referenced
via ${{ matrix.elixir }}, ${{ matrix.erlang }}, and ${{ matrix.elixir_otp }}
throughout job names, cache keys, and mise commands.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
.github/workflows/ci.yml (2)

215-217: Consider adding mise.toml hash to the compatibility mise cache key.

At present, Line 215 keys only by OS/arch/version fields. Including hashFiles('mise.toml') would keep invalidation behaviour consistent with the other mise-cached jobs.

Small key hardening
-          key: mise-compat-${{ runner.os }}-${{ runner.arch }}-erlang-${{ matrix.erlang }}-elixir-${{ matrix.elixir }}
+          key: mise-compat-${{ runner.os }}-${{ runner.arch }}-erlang-${{ matrix.erlang }}-elixir-${{ matrix.elixir }}-${{ hashFiles('mise.toml') }}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/ci.yml around lines 215 - 217, The cache key for the
"mise-compat-..." cache currently only includes OS/arch/erlang/elixir
identifiers; update the key generation to incorporate the mise.toml content hash
(using hashFiles('mise.toml')) so cache is invalidated when mise.toml changes —
specifically modify the key expression that builds "mise-compat-${{ runner.os
}}-${{ runner.arch }}-erlang-${{ matrix.erlang }}-elixir-${{ matrix.elixir }}"
to append or include the hashFiles('mise.toml') value, and mirror the same
change (or leave restore-keys unchanged if you want broader restores) for the
restore logic so behavior matches other mise-cached jobs.

189-199: Avoid split version sources in the compatibility job.

matrix.elixir and matrix.elixir_otp can drift over time. If they diverge, the displayed version/cache key can stop matching the runtime that mise actually installs.

Suggested tidy-up (single source via elixir_otp)
-    name: Elixir ${{ matrix.elixir }} / OTP ${{ matrix.erlang }} / ${{ matrix.os }}
+    name: Elixir ${{ matrix.elixir_otp }} / OTP ${{ matrix.erlang }} / ${{ matrix.os }}

       matrix:
         os: [ubuntu-latest, macos-latest]
-        elixir: ["1.18.0"]
         erlang: ["27.0"]
         elixir_otp: ["1.18.0-otp-27"]

...
-          key: ${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.erlang }}-${{ hashFiles('mix.exs', '**/Cargo.toml') }}
+          key: ${{ runner.os }}-mix-${{ matrix.elixir_otp }}-${{ matrix.erlang }}-${{ hashFiles('mix.exs', '**/Cargo.toml') }}
           restore-keys: |
-            ${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.erlang }}-
+            ${{ runner.os }}-mix-${{ matrix.elixir_otp }}-${{ matrix.erlang }}-

Also applies to: 221-223, 240-242

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/ci.yml around lines 189 - 199, The CI matrix is using two
version sources (matrix.elixir and matrix.elixir_otp) which can drift;
consolidate to a single source by removing matrix.elixir and using
matrix.elixir_otp as the canonical Elixir+OTP identifier (update the matrix
declaration and any references that read matrix.elixir to read matrix.elixir_otp
instead, e.g., the job name "Elixir ${{ matrix.elixir }} / OTP ${{ matrix.erlang
}} / ${{ matrix.os }}" and any cache keys or setup steps that currently
reference matrix.elixir); ensure all occurrences (including where matrix.elixir
is used for displays, caching, or mise install logic) are switched to
matrix.elixir_otp so the displayed/versioned value and runtime installation
remain in sync.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/workflows/ci.yml:
- Around line 215-217: The cache key for the "mise-compat-..." cache currently
only includes OS/arch/erlang/elixir identifiers; update the key generation to
incorporate the mise.toml content hash (using hashFiles('mise.toml')) so cache
is invalidated when mise.toml changes — specifically modify the key expression
that builds "mise-compat-${{ runner.os }}-${{ runner.arch }}-erlang-${{
matrix.erlang }}-elixir-${{ matrix.elixir }}" to append or include the
hashFiles('mise.toml') value, and mirror the same change (or leave restore-keys
unchanged if you want broader restores) for the restore logic so behavior
matches other mise-cached jobs.
- Around line 189-199: The CI matrix is using two version sources (matrix.elixir
and matrix.elixir_otp) which can drift; consolidate to a single source by
removing matrix.elixir and using matrix.elixir_otp as the canonical Elixir+OTP
identifier (update the matrix declaration and any references that read
matrix.elixir to read matrix.elixir_otp instead, e.g., the job name "Elixir ${{
matrix.elixir }} / OTP ${{ matrix.erlang }} / ${{ matrix.os }}" and any cache
keys or setup steps that currently reference matrix.elixir); ensure all
occurrences (including where matrix.elixir is used for displays, caching, or
mise install logic) are switched to matrix.elixir_otp so the displayed/versioned
value and runtime installation remain in sync.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e1624c14-2411-465a-906f-cf579b2da8da

📥 Commits

Reviewing files that changed from the base of the PR and between 18e8b30 and 1d9c7fc.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • mise.toml
✅ Files skipped from review due to trivial changes (1)
  • mise.toml

ocean added 4 commits April 18, 2026 16:32
- Add mise.toml hashing
- Use single elixir_otp variable in compatibility job
…stream

RUSTSEC-2026-0098 and RUSTSEC-2026-0099 affect rustls-webpki 0.102.x
via libsql's rustls 0.22.x pin. Cannot update until libsql bumps its
rustls dependency to 0.23+.
- credo 1.7.17 => 1.7.18
- rustler_precompiled 0.8.4 => 0.9.0
- stream_data 1.2.0 => 1.3.0
@ocean ocean merged commit b9d0647 into main Apr 22, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant